手把手|教你用Python换个姿势,送狗年祝福语
作者:菜鸟分析
个人介绍:一个痴迷于Python语言的业余程序猿,未来的理想是能够与一群痴迷于Python语言的程序猿改变世界
知乎专栏: https://zhuanlan.zhihu.com/c_149865214
专栏介绍:恋习Python|因痴恋Python而起,因学习Python而聚,与大家一起疯狂练习Python代码
春节既是一个阖家团圆的节日,也是一个集中问候亲朋好友、了解近况的机会。但是也有很多人过年也不能聚在一起,所以就会会选择发短信这一方式来表达自己的祝福。其中大多人都是复制转发,让人一眼就看穿,显得自己在回复他人的时候,就觉得自己的脑子不够用了。
别怕,不要慌张,在春节来临之前,菜鸟分析的这期手把手系列,逐步带各位利用Python完成一个技术范儿十足又有点高逼格的春节祝福:用词云图定制化一个属于自己的2018年狗年祝福。
好的,一切就绪,坐稳,老司机要上路了。
一、前期准备工作
在实现代码之前,我们需要准备一些关于狗年祝福语的语料库。那究竟什么是语料库呢?语料库是我们要分析的所有文档的集合。
在日常工作中我们对文章的管理,先是一篇篇的文章不断的积累,我们存了大量的文章之后,会对文章信息进行一些归类的工作,一般体现于建立不同的文件夹来保存不同类别的文章。
同样的,我们把我们需要分析的文本文件,读取内存变量中,然后在内存变量中使用不同的数据结构,对这些文本文件进行存储,以便进行下一步的分析。这个内存变量就是语料库。
语料库构建实操
这里,菜鸟分析整理了一份网络上2018年最热门狗年祝福语语料数据,我将其存放
同时还需要在实现词云功能之前,我们需要一个python的编写和运行环境,同时安装好相关的依赖包。 对于python环境,我们推荐使用ipython notebook。 在本地电脑环境,anaconda提供了非常便利的安装和部署,他会自动帮你把ipython notebook环境部署好。
词云功能所需的依赖包如下: jieba(分词包)、numpy(计算包)、 codecs(语言代码处理包)、 pandas(数据分析包)、 matplotlib(绘图功能包)、 WordCloud(词云包)。
如果在安装过程中出现问题,可以看看这篇文章:
https://zhuanlan.zhihu.com/p/33507393
一切就位,接下来,就是实操代码时刻了,就问你激不激动!?
二、代码演练
1.导入相关
#导入所需要的包
import jieba
import numpy as np
import codecs
import pandas
import matplotlib.pyplot as plt
from scipy.misc import imread
from wordcloud import WordCloud,ImageColorGenerator
2.导入相关记录txt文件,分词
所谓分词即是将文本序列按完整的意思切分成一个一个的词儿,方便进行下一步的分析(词频统计,情感分析等)。
由于英文词与词自带空格作为分隔符,相比于中文分词要简单的多。我们在做中文分词时,需要把词语从一整段话中筛出来,困难之处在于,汉语表达博大精深,一段话往往有不同的切分方法。
所幸这不是我们需要担心的,Python中的Jieba库提供了现成的解决方案。
#分词
file=codecs.open(u"2018.txt",'r',encoding='UTF-8')
content=file.read()
file.close()
segment=[]
#jiaba调用了自己的分词算法,将切分好的文本按逗号分隔符分开
segs=jieba.cut(content)
for seg in segs:
if len(seg)>1 and seg!='\r\n':
segment.append(seg)
3.统计词频:狗年祝福日常高频词
下面进入到词云的关键一步了:词频统计。我们需要统计有效词集中每个词的出现次数,统计使用groupby函数。
#统计分词结果
words_df=pandas.DataFrame({'segment':segment})#组建数据框pandas.DataFrame
words_df.head()
words_stat=words_df.groupby(by=['segment'])['segment'].agg({"计数":numpy.size})
words_stat=words_stat.reset_index()
words_stat
我们已经把语料库搭建好,对语料库进行了分词,上面的案例我们得到了一列为分词(segment),一列为分词所属文件(filePath)的数据框,接下来我们进行词频统计就非常简单了。
我们使用分组统计函数,直接在分词变量数据框后调用groupby方法,使用分词字段进行分组,然后聚合函数使用numpy.size函数,也就是对分组字段做一个计数,最后重新设定索引[‘segment’],在根据计算进行倒序排列,得到的结果就是我们词频统计的结果了。
这里要特别注意的是:降序计数调用的方法sort函数,需要新版本的pandas库,懒得升新版本不降序也不影响后续的处理,这里小伙伴们可以自己处理。
4.做词云,开启狗年汪汪汪模式
最后是词云的点睛之笔了:数据图形化显示。有了强有力的工具包,这些工作都是分分钟就可以搞定。我们使用matplotlib和wordcloud工具来图形化显示上述的词频统计结果
%matplotlib
#生成一个matplot对象,传入一个字体位置的路径和背景颜色即可
wordcloud=WordCloud(font_path="C:\simhei.ttf",background_color="white",max_words=200)
#WordCloud方法接受一个字典结构的输入,我们前面整理出来的词频统计结果是数据框的形式,因此需要转换,转换的方法,
#首先把分词设置为数据框的索引,然后在调用一个to_dict()的方法,就可以转换为字典的机构
words=words_stat.set_index('segment').to_dict()
#接着调用fit_words方法来调用我们的词频
wordcloud.fit_words(words['计数'])
#绘图
plt.imshow(wordcloud)
plt.show()
5.自定义背景图做词云,让他看到你是真心祝福
我们当然还可以把图形呈现玩得再酷炫一些,自定义一个心形图像背景并将词云图形化输出。
当然你也可以选择对你们更有意义的图片,生成自己独一无二的词云图,我自己在网上找了一对萌狗狗(如自己的照片,自家的狗狗等)如果你想将生成的图形以本地图片的形式生成并打开显示,可以使用下面的实现代码:
%matplotlib
cloud_mask=imread(r'C:\gou.png')
wordcloud=WordCloud(background_color="white",mask=cloud_mask,font_path="C:\simhei.ttf")
words=words_stat.set_index('segment').to_dict()
wordcloud.fit_words(words['计数'])
plt.imshow(wordcloud)
plt.show()
以上,就是2018年狗年春节祝福语词云的实现过程,所有代码都经过调试,直接可用。 让喜欢数据的你,利用这种方式,为心爱的他/她,带来一份数据感、科技感、炫酷感、新奇感十足的春节祝福吧!
再次菜鸟分析也祝福大家旺旺狗年,幸福吉祥!觉得不错话,顺手点个赞,转发一下哦!
赞赏作者
Python爱好者社区历史文章大合集:
Python爱好者社区历史文章列表(每周append更新一次)
关注后在公众号内回复“课程”即可获取:
小编的Python入门视频课程!!!
崔老师爬虫实战案例免费学习视频。
丘老师数据科学入门指导免费学习视频。
陈老师数据分析报告制作免费学习视频。
玩转大数据分析!Spark2.X+Python 精华实战课程免费学习视频。
丘老师Python网络爬虫实战免费学习视频。